import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class MainFenetre extends JFrame implements ActionListener {
	private JPanel panel = new JPanel();
	private JPanel superpanel = new JPanel();
	private ImagePanel imgPanel = new ImagePanel();
	private JFormattedTextField jftf_nb_m_h;
	private JFormattedTextField jftf_nb_m_v;
	public boolean verif = true;
	private BufferedImage image;
	public MainFenetre(BufferedImage i) throws IOException{
		super();
		image = i;
		build();
		//proceed();
	}

	private void proceed() {
		/* 
		 * 
		 * pour toutes les lignes , on regarde chaque pixels de la ligne, 
		 * et on compte le nombre de motif par ligne, ensuite on fait une moyenne des lignes,
		 * en otant les lignes avec zero motif. De même pour les colonnes.
		 * 
		 */
		BufferedImage img = imgPanel.getBufferedImage();
		boolean motifEnCours ;
		HashMap<Integer, Integer> map_h = new HashMap<Integer, Integer>();
		HashMap<Integer, Integer> map_v = new HashMap<Integer, Integer>();



		//parcour horizontal
		for (int i = 0 ; i< img.getHeight() ; i++){
			//debut de ligne , mettre motif a faux, et on décrit la ligne comme vide
			motifEnCours = false;
			Integer compteur = 0;
			// parcours de la ligne
			for(int i2 = 0 ; i2 < img.getWidth() ; i2++ ){
				//si !WHITE alors motif
				//si moi pas blanc et avant & !motif en cours
				if(!(new Color(img.getRGB(i2, i)).equals(Color.WHITE))){


					if(!motifEnCours){
						compteur++;
					}
					motifEnCours = true;

				}
				if(new Color(img.getRGB(i2, i)).equals(Color.WHITE)){
					motifEnCours =false;
				}
			}
			if( map_h.containsKey(compteur)){ 
				map_h.put(compteur, (map_h.get(compteur))+1);
			}
			else{
				map_h.put(compteur, 1);
			}
		}
		if(verif){

			System.out.println(map_h.toString());
		}
		Iterator it = map_h.entrySet().iterator();
		Integer res = 1;
		while ( it.hasNext()){
			Map.Entry pairs = (Map.Entry)it.next(); 
			if((Integer)pairs.getKey() != 0 && (Integer)pairs.getValue() >= map_h.get(res)){
				res= (Integer) pairs.getKey();
			}

		}
		jftf_nb_m_h.setValue(res);

		//parcours vertical
		for(int j = 0 ; j< img.getWidth() ; j++){
			motifEnCours = false;
			Integer compteur = 0;
			//parcours d'une colonne
			for(int j2 = 0 ; j2<img.getHeight(); j2++){
				if(!(new Color(img.getRGB(j,j2)).equals(Color.WHITE))){
					if(!motifEnCours){
						compteur++;
					}
					motifEnCours= true;
				}
				if(new Color(img.getRGB(j, j2)).equals(Color.WHITE)){
					motifEnCours = false;
				}
			}
			if (!map_v.containsKey(compteur)){
				map_v.put(compteur, 1);
			}
			else{
				map_v.put(compteur, map_v.get(compteur)+1);
			}
		}
		if(verif){
			System.out.println(map_v.toString());
		}
		Iterator it2 = map_v.entrySet().iterator();
		res = 1;
		while ( it2.hasNext()){
			Map.Entry pairs = (Map.Entry)it2.next(); 
			if((Integer)pairs.getKey() != 0 && (Integer)pairs.getValue() >= map_v.get(res)){
				res= (Integer) pairs.getKey();
			}

		}
		jftf_nb_m_v.setValue(res);

	}

	private void build() throws IOException {
		
		setTitle("MAin_Fenetre");
		setSize(1364,768);
		setLocationRelativeTo(null);
		setResizable(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setContentPane(buildContentPane());
		setVisible(true);	
	}



	private JPanel buildContentPane() throws IOException {
		
		superpanel.setLayout(new BorderLayout());
		imgPanel.setImage(image);
		/*panel.setLayout(new GridLayout(25,1));
		JLabel label_nb_motif_h = new JLabel("nombre de motif(s) horizontalement");
		JLabel label_nb_motif_v = new JLabel("nombre de motif(s) verticalement");
		jftf_nb_m_h = new JFormattedTextField(new Integer(-1));
		jftf_nb_m_v = new JFormattedTextField(new Integer(-1));
		panel.add(label_nb_motif_h);
		panel.add(jftf_nb_m_h);
		panel.add(label_nb_motif_v);
		panel.add(jftf_nb_m_v);
		superpanel.add(panel,BorderLayout.WEST);*/
		superpanel.add(imgPanel);
		return superpanel;
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub

	}



}
